package com.own.component.store.redis.method;

import com.own.component.store.core.method.StoreMap;
import org.redisson.api.RedissonClient;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

/**
 * DefaultRedisStoreMap
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public class DefaultRedisStoreMap<V> extends DefaultBaseStoreMethod implements StoreMap<V> {

    public DefaultRedisStoreMap(RedissonClient redissonClient) {
        super(redissonClient);
    }

    /**
     * 获取当前存储的键的map对象
     *
     * @param name 唯一key
     * @return map对象
     */
    @Override
    public Map<String, V> get(String name) {
        return getRedissonClient().getMap(buildKey(name));
    }

    /**
     * 获取值
     *
     * @param name 唯一key
     * @param key  map key
     * @return 值
     */
    @Override
    public V get(String name, String key) {
        return getRedissonClient().<String, V>getMap(buildKey(name)).get(key);
    }

    /**
     * 添加值
     *
     * @param name 唯一key
     * @param map  map对象
     */
    @Override
    public void putAll(String name, Map<String, V> map) {
        getRedissonClient().<String, V>getMap(buildKey(name)).putAll(map);
    }

    /**
     * 添加值
     *
     * @param name  唯一key
     * @param key   map key
     * @param value 值
     */
    @Override
    public void put(String name, String key, V value) {
        getRedissonClient().<String, V>getMap(buildKey(name)).put(key, value);
    }

    /**
     * 移除缓存
     *
     * @param name 唯一key
     * @param key  map key
     */
    @Override
    public void remove(String name, String key) {
        getRedissonClient().<String, V>getMap(buildKey(name)).remove(key);
    }

    /**
     * 是否存啊在
     *
     * @param name 唯一key
     * @param key  map key
     * @return 是否存在
     */
    @Override
    public boolean contains(String name, String key) {
        return getRedissonClient().<String, V>getMap(buildKey(name)).containsKey(key);
    }

    /**
     * 获取缓存的长度
     *
     * @param name 唯一key
     * @param key  map key
     * @return 长度
     */
    @Override
    public Long size(String name, String key) {
        return (long) getRedissonClient().<String, V>getMap(buildKey(name)).size();
    }

    /**
     * 获取所有的键set
     *
     * @param name 唯一key
     * @return set
     */
    @Override
    public Set<String> keySet(String name) {
        return getRedissonClient().<String, V>getMap(buildKey(name)).keySet();
    }

    /**
     * 获取所有的值set
     *
     * @param name 唯一key
     * @return 值列表
     */
    @Override
    public Collection<V> values(String name) {
        return getRedissonClient().<String, V>getMap(buildKey(name)).values();
    }

}
